// 自定义模块
var module = {
  './esmodule/name.js': (module, exports, require) => {
    // 首先给该模块设置tag, 标识这是一个ES Module
    require.setModuleTag(exports)

    // 通过代理给exports设置属性
    require.defineProperty(exports, {
      age: () => age,
      default: () => DEFAULT_EXPORT
    })

    const name = 'charlie'
    const age = '18'
    const DEFAULT_EXPORTS = name
  }
}

// 设置缓存
var cache = {}

// 定义加载模块函数
function require(modulePath) {
  var cachedModule = cache[modulePath]
  if(cachedModule !== undefined) {
    return cachedModule.exports
  }

  var module = cache[modulePath] = {
    exports: {}
  }

  return module.exports
}

// 对exports对象做代理
require.defineProperty = (exports, definition) => {
  for(var key in definition) {
    Object.defineProperty(exports, key, {
      enumerable: true,
      get: definition[key]
    })
  }
}

// 标识模块的类型为ES Module
require.setModuleTag = (exports) => {
  Object.defineProperty(exports, Symbol.toStringTag, {
    value: 'module'
  })

  Object.defineProperty(exports, '__esModule', {
    value: true
  })
}

// 一下是编译后的main.js 编译后的内容
// 拿到的是导出队形的exports对象
var _esmodule_name_js__WEBPACK_IMPORTED_MODULE_0__ = require('./esmodule/name.js')
console.log('name-------', `${_esmodule_name_js__WEBPACK_IMPORTED_MODULE_0__["default"]} is ${_esmodule_name_js__WEBPACK_IMPORTED_MODULE_0__.age}`)